#include <windows.h>
#include <windowsx.h>
#include "dialogEdytor.h"

char * intToChar(int l);

BOOL CALLBACK DlgGniazdoProc( HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam )
{

    switch( Msg )
    {
        case WM_INITDIALOG:  
        {
             if (edt->opcja == 1)
             {
                 HWND hNumerGniazda = GetDlgItem(hwnd, IDET_NUMER_GNIAZDA);
                 SetWindowText( hNumerGniazda, intToChar(edt->nrGniazda));
                 Edit_Enable(hNumerGniazda, FALSE);
                 HWND hLiczbaMaszyn = GetDlgItem(hwnd, IDET_LICZBA_MASZYN);
                 SetWindowText( hLiczbaMaszyn, "1");
                 HWND hPojemnosc = GetDlgItem(hwnd, IDET_POJEMNOSC);
                 SetWindowText( hPojemnosc, "100");
                 
                 HWND hTyp = GetDlgItem(hwnd, IDRB_FIFO);
                 SendMessage(hTyp, BM_SETCHECK, BST_CHECKED, 0);
                 hTyp = GetDlgItem(hwnd, IDRB_LIFO);
                 SendMessage(hTyp, BM_SETCHECK, BST_UNCHECKED, 0);
                 hTyp = GetDlgItem(hwnd, IDRB_RANDOM);
                 SendMessage(hTyp, BM_SETCHECK, BST_UNCHECKED, 0);
             }
             else if (edt->opcja == 2)
             {
                 HWND hNumerGniazda = GetDlgItem(hwnd, IDET_NUMER_GNIAZDA);
                 SetWindowText( hNumerGniazda, intToChar(edt->tmpG->getNr()));
                 Edit_Enable(hNumerGniazda, FALSE);
                 HWND hLiczbaMaszyn = GetDlgItem(hwnd, IDET_LICZBA_MASZYN);
                 SetWindowText( hLiczbaMaszyn, intToChar(edt->tmpG->getLiczbaMaszyn()));
                 HWND hPojemnosc = GetDlgItem(hwnd, IDET_POJEMNOSC);
                 SetWindowText( hPojemnosc, intToChar(edt->tmpG->getKolejka()->getPojemnosc()));
                 
                 typyKolejki typ = edt->tmpG->getKolejka()->getTypKolejki();
                 if (typ == typyKolejki(FIFO)) SendMessage(GetDlgItem(hwnd, IDRB_FIFO), BM_SETCHECK, BST_CHECKED, 0);
                 else if (typ == typyKolejki(LIFO)) SendMessage(GetDlgItem(hwnd, IDRB_LIFO), BM_SETCHECK, BST_CHECKED, 0);
                 else if (typ == typyKolejki(RANDOM)) SendMessage(GetDlgItem(hwnd, IDRB_RANDOM), BM_SETCHECK, BST_CHECKED, 0);
                
                 if (edt->tmpG->getWejscie() == true) SendMessage(GetDlgItem(hwnd, IDCHB_WEJSCIE), BM_SETCHECK, BST_CHECKED, 0);
                 if (edt->tmpG->getWyjscie() == true) SendMessage(GetDlgItem(hwnd, IDCHB_WYJSCIE), BM_SETCHECK, BST_CHECKED, 0);
             }
        }
             break;
             
        case WM_COMMAND:
        {
             switch( LOWORD( wParam ) )
            { 
                case IDRB_FIFO:
                {
                      HWND hTyp = GetDlgItem(hwnd, IDRB_FIFO);
                      SendMessage(hTyp, BM_SETCHECK, BST_CHECKED, 0);
                      hTyp = GetDlgItem(hwnd, IDRB_LIFO);
                      SendMessage(hTyp, BM_SETCHECK, BST_UNCHECKED, 0);
                      hTyp = GetDlgItem(hwnd, IDRB_RANDOM);
                      SendMessage(hTyp, BM_SETCHECK, BST_UNCHECKED, 0);
    
                } 
                break;
                case IDRB_LIFO:
                {
                      HWND hTyp = GetDlgItem(hwnd, IDRB_FIFO);
                      SendMessage(hTyp, BM_SETCHECK, BST_UNCHECKED, 0);
                      hTyp = GetDlgItem(hwnd, IDRB_LIFO);
                      SendMessage(hTyp, BM_SETCHECK, BST_CHECKED, 0);
                      hTyp = GetDlgItem(hwnd, IDRB_RANDOM);
                      SendMessage(hTyp, BM_SETCHECK, BST_UNCHECKED, 0);
    
                } 
                break;
                case IDRB_RANDOM:
                {
                      HWND hTyp = GetDlgItem(hwnd, IDRB_FIFO);
                      SendMessage(hTyp, BM_SETCHECK, BST_UNCHECKED, 0);
                      hTyp = GetDlgItem(hwnd, IDRB_LIFO);
                      SendMessage(hTyp, BM_SETCHECK, BST_UNCHECKED, 0);
                      hTyp = GetDlgItem(hwnd, IDRB_RANDOM);
                      SendMessage(hTyp, BM_SETCHECK, BST_CHECKED, 0);
    
                } 
                break;
                case IDCHB_WEJSCIE:
                {
                      HWND hWe = GetDlgItem(hwnd, IDCHB_WEJSCIE);
                      if ( SendMessage(hWe, BM_GETCHECK, 0, 0) == 1) SendMessage(hWe, BM_SETCHECK, BST_UNCHECKED, 0);
                      else SendMessage(hWe, BM_SETCHECK, BST_CHECKED, 0);
                } 
                break;
                case IDCHB_WYJSCIE:
                {
                      HWND hWy = GetDlgItem(hwnd, IDCHB_WYJSCIE);
                      if ( SendMessage(hWy, BM_GETCHECK, 0, 0) == 1) SendMessage(hWy, BM_SETCHECK, BST_UNCHECKED, 0);
                      else SendMessage(hWy, BM_SETCHECK, BST_CHECKED, 0);
                } 
                break;
                case IDOK: 
                {
                     HWND hLiczbaMaszyn = GetDlgItem(hwnd, IDET_LICZBA_MASZYN);
                     char * tmp = new char[10];
                     GetWindowText(hLiczbaMaszyn, tmp, 10);
                     int liczbaMaszyn = atoi(tmp);
                     delete [] tmp;
                     
                     HWND hPojemnosc = GetDlgItem(hwnd, IDET_POJEMNOSC);
                     tmp = new char[10];
                     GetWindowText(hPojemnosc, tmp, 10);
                     int pojemnosc = atoi(tmp);
                     delete [] tmp;

                      typyKolejki typ;
                      HWND hTyp = GetDlgItem(hwnd, IDRB_FIFO);
                      if ( SendMessage(hTyp, BM_GETCHECK, 0, 0) == 1) typ = typyKolejki(FIFO);
                      hTyp = GetDlgItem(hwnd, IDRB_LIFO);
                      if ( SendMessage(hTyp, BM_GETCHECK, 0, 0) == 1) typ = typyKolejki(LIFO);
                      hTyp = GetDlgItem(hwnd, IDRB_RANDOM);
                      if ( SendMessage(hTyp, BM_GETCHECK, 0, 0) == 1) typ = typyKolejki(RANDOM);
                     
                     bool wejscie = false;
                     HWND hWe = GetDlgItem(hwnd, IDCHB_WEJSCIE);
                     if ( SendMessage(hWe, BM_GETCHECK, 0, 0) == 1) wejscie = true;
                     
                     bool wyjscie = false;
                     HWND hWy = GetDlgItem(hwnd, IDCHB_WYJSCIE);
                     if ( SendMessage(hWy, BM_GETCHECK, 0, 0) == 1) wyjscie = true;
                      
                     if (edt->opcja == 1)
                     {
                         edt->tmpG = new Gniazdo(edt->nrGniazda, typ, pojemnosc, wejscie, wyjscie, liczbaMaszyn, edt->actI, edt->actJ);                        
                         edt->wstawGniazdo(edt->tmpG);
                         edt->nrGniazda++;
                     }
                     else if (edt->opcja == 2)
                     {
                          edt->tmpG->edytuj1(typ, pojemnosc, wejscie, wyjscie, liczbaMaszyn);
                     }
                     
                     EndDialog( hwnd, IDOK ); 
                }
                break;
                     
                case IDCANCEL: 
                     EndDialog( hwnd, IDCANCEL ); 
                     break;
                     
            }
      
            
        }
        break;
       
        default: return FALSE;
    } 
    return TRUE;    
}
